home *** CD-ROM | disk | FTP | other *** search
/ PC-Blue - MS DOS Public Domain Library / PC-Blue MS-DOS Public Domain Library - NYACC.iso / vol040 / ibmodem.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1987-01-11  |  11.9 KB  |  345 lines

  1. 60  '
  2. 70  '                 In order for the hang-up command to work,
  3. 80  '                 you MUST flip switch #1 on the modem UP.
  4. 85  '                      (You should have it up anyway.)
  5. 86  '                SWITCH SETTINGS ON SMARTMODEM UUDDDDDD
  6. 87  '
  7. 90  SCREEN 0,0,0,0 : LOCATE ,,1 : WIDTH 80 : KEY OFF : CLOSE
  8. 95  ON ERROR GOTO 1000
  9. 100              ' Set Variable Defaults ---------------------------------------
  10. 110  DEFINT A-Z                    ' All Variables Are Integers
  11. 120  ONLINE = -1                   ' Start On-Line
  12. 130  EVEN   = -1                   ' Even Parity, 7 Bit Word Structure
  13. 140  PRINTER=  0                   ' Printer Off
  14. 150  DISK   =  0                   ' Disk(s) Off
  15. 160  LOCAL  =  0 : HOST=0          ' Echoes  Off
  16. 170  BK$=CHR$(29)+CHR$(32)+CHR$(29)' Clean Backspace For Local PC
  17. 180  SOH$=CHR$(1)  :  EOT$=CHR$(4)  : ACK$=CHR$(6)
  18. 190  XON$=CHR$(17) : XOFF$=CHR$(19) : NAK$=CHR$(21) : CAN$=CHR$(24)
  19. 200              ' Define Funtion Keys -----------------------------------------
  20. 210  KEY(1)ON:ON KEY(1)GOSUB 3100
  21. 220  KEY(2)ON:ON KEY(2)GOSUB 3200
  22. 230  KEY(3)ON:ON KEY(3)GOSUB 3300
  23. 240  KEY(4)ON:ON KEY(4)GOSUB 3400
  24. 250  KEY(5)ON:ON KEY(5)GOSUB 3500
  25. 260  KEY(6)ON:ON KEY(6)GOSUB 3600
  26. 270  KEY(7)ON:ON KEY(7)GOSUB 3700
  27. 280  KEY(8)ON:ON KEY(8)GOSUB 3800
  28. 290  KEY(9)ON:ON KEY(9)GOSUB 3900
  29. 295  KEY(10)ON:ON KEY(10)GOSUB 4000
  30. 297  DEF SEG:POKE 106,0
  31. 300              ' Define I/O Channels -----------------------------------------
  32. 310  OPEN "R",#1,"COM1:"          ' Modem ====> File #1
  33. 320  OPEN "O",#2,"LPT1:"          ' Printer ==> File #2
  34. 330  PRINT #1,"ATE1QTS11=50"      ' Initialize Modem
  35. 340  FOR X=1 TO 1000 : NEXT : GOSUB 25000 : GOSUB 800
  36. 400              ' Keyboard Driven Terminal Loop -------------------------------
  37. 410  WHILE ONLINE
  38. 420     X$=INKEY$:IF X$<>"" THEN LOCATE ,,1:PRINT #1,X$;:IF LOCAL THEN GOSUB 470
  39. 430     GOSUB 500
  40. 440  WEND
  41. 450  IF NOT ONLINE THEN 450  ' Off-Line Wait Loop
  42. 460  GOTO 410
  43. 470  IF POS(0)>1 AND X$=CHR$(8) THEN PRINT BK$; ELSE PRINT X$;
  44. 480  RETURN
  45. 500              ' Main Communication Loop -------------------------------------
  46. 510  WHILE NOT EOF(1)
  47. 520     X$=INKEY$ : IF X$<>"" THEN LOCATE ,,1 : PRINT #1,X$;
  48. 530     Y$=INPUT$(LOC(1),#1) : IF DISK THEN PRINT #3,Y$;
  49. 540     FOR I=1 TO LEN(Y$)
  50. 550        J=ASC(MID$(Y$,I,1)) : IF J=10 THEN 590 ELSE IF J=8 THEN 595
  51. 560        PRINT CHR$(J); : IF HOST THEN PRINT #1,CHR$(J);
  52. 570     NEXT : IF PRINTER THEN PRINT #2,Y$;
  53. 580  WEND : RETURN
  54. 590  MID$(Y$,I,1)=" " : GOTO 570
  55. 595  IF POS(0)>1 THEN PRINT BK$; : IF HOST THEN PRINT #1,CHR$(J);
  56. 597  GOTO 570
  57. 800              ' Function Key Display Menu -----------------------------------
  58. 810  CLS : PRINT TAB(15);"MENU FOR FUNCTION KEYS" : PRINT
  59. 820  PRINT TAB(10)"Key 1 . . . . . . To Toggle Modem Online/Offline
  60. 830  PRINT TAB(10)"Key 2 . . . . . . To Toggle On/Off LOCAL Echo
  61. 840  PRINT TAB(10)"Key 3 . . . . . . To Toggle On/Off HOST  Echo
  62. 850  PRINT TAB(10)"Key 4 . . . . . . To Dial A Number
  63. 860  PRINT TAB(10)"Key 5 . . . . . . To Display This Menu
  64. 870  PRINT TAB(10)"Key 6 . . . . . . To Toggle Printer On/Off
  65. 880  PRINT TAB(10)"Key 7 . . . . . . To Write To Disk From Modem
  66. 890  PRINT TAB(10)"Key 8 . . . . . . To Write To Modem From Disk
  67. 900  PRINT TAB(10)"Key 9 . . . . . . To Toggle Between E,7,1 and N,8,1 words
  68. 910  PRINT TAB(10)"Key 10. . . . . . To Return To Basic  Without Hanging-Up
  69. 920  PRINT
  70. 930  PRINT TAB(10)"Alt + Key 3 . . . To Change To 300 Baud
  71. 940  PRINT TAB(10)"Alt + Key 4 . . . To Continuously Dial A Number
  72. 950  PRINT TAB(10)"Alt + Key 5 . . . To Change To 450 Baud
  73. 960  PRINT TAB(10)"Alt + Key 6 . . . To Change To 600 Baud
  74. 970  PRINT TAB(10)"Alt + Key 7 . . . To Write To Disk With Xmodem Protocol
  75. 975  PRINT TAB(10)"Alt + Key 8 . . . To Write To Modem From Disk With Xmodem
  76. 980  PRINT TAB(10)"Alt + Key 10. . . To Hang-Up
  77. 990  PRINT : RETURN
  78. 1000             ' Error Vector Table -----------------------------------------
  79. 1010  PRINT
  80. 1020  IF ERR=24 THEN PRINT "Device Timeout" : PRINT : RESUME 400
  81. 1030  IF ERR=27 THEN PRINT "Printer"        : PRINT : RESUME 400
  82. 1040  IF ERR=57 THEN PRINT "Device I/O"     : PRINT : RESUME 400
  83. 1050  IF ERR=52 THEN PRINT "Bad Filename"           : GOTO 1150
  84. 1060  IF ERR=61 THEN PRINT "Disk Full"              : GOTO 1150
  85. 1070  IF ERR=67 THEN PRINT "Directory Full"         : GOTO 1150
  86. 1080  IF ERR=70 THEN PRINT "Disk Write Protected"   : GOTO 1150
  87. 1090  IF ERR=71 THEN PRINT "Drive Not Ready"        : GOTO 1150
  88. 1100  IF ERR=72 THEN PRINT "Disk Media Error"       : GOTO 1150
  89. 1105  IF ERR=53 AND ERL=3770 THEN RESUME 3780
  90. 1110  IF ERR=53 THEN PRINT "File Not Found" : PRINT : FILES : GOTO 1150
  91. 1120  IF ERR=58 THEN PRINT "File Already Exists" : PRINT : FILES : GOTO 1150
  92. 1130  ON ERROR GOTO 0
  93. 1150  PRINT : DISK=0 : CLOSE #3 : IF NOT ONLINE THEN GOSUB 3120
  94. 1160  LOCATE ,,1 : RESUME 400
  95. 3100             ' Service Function Key #1 -------------------------------------
  96. 3110  GOSUB 5000 : KEY(1)ON : ON S GOTO 6100,7100,8100
  97. 3120  ONLINE=NOT ONLINE : IF NOT ONLINE THEN 3140
  98. 3130  PRINT #1, XON$ : PRINT "Status :  ON  Line" : RETURN
  99. 3140  PRINT #1, XOFF$: PRINT "Status :  OFF Line" : RETURN
  100. 3200             ' Service Function Key #2 -------------------------------------
  101. 3210  GOSUB 5000 : KEY(2) ON : ON S GOTO 6200,7200,8200
  102. 3220  LOCAL=NOT LOCAL
  103. 3230  PRINT "Local Echo "; : IF LOCAL THEN PRINT "ON" ELSE PRINT "OFF"
  104. 3240  RETURN
  105. 3300             ' Service Function Key #3 -------------------------------------
  106. 3310  GOSUB 5000 : KEY(3)ON : ON S GOTO 6300,7300,8300
  107. 3320  HOST=NOT HOST
  108. 3330  PRINT "Host Echo "; : IF HOST THEN PRINT "ON" ELSE PRINT "OFF"
  109. 3340  RETURN
  110. 3400             ' Service Function Key #4 -------------------------------------
  111. 3410  GOSUB 5000 : KEY(4)ON : ON S GOTO 6400,7400,8400
  112. 3420  GOSUB 10000 : PRINT
  113. 3430  PRINT #1,"AT M1 D "+X$
  114. 3440  RETURN
  115. 3500             ' Service Function Key #5 -------------------------------------
  116. 3510  GOSUB 5000 : KEY(5)ON : ON S GOTO 6500,7500,8500
  117. 3520  GOTO 800
  118. 3600             ' Service Function Key #6  ------------------------------------
  119. 3610  GOSUB 5000 : KEY(6)ON : ON S GOTO 6600,7600,8600
  120. 3620  PRINTER=NOT PRINTER
  121. 3630  IF PRINTER THEN PRINT "Printer ON" ELSE PRINT "Printer OFF"
  122. 3640  RETURN
  123. 3700             ' Service Function Key #7 -------------------------------------
  124. 3710  GOSUB 5000 : KEY(7)ON : ON S GOTO 22000,7700,8700
  125. 3720  DISK=NOT DISK
  126. 3730  IF NOT DISK THEN CLOSE #3 : PRINT "File Closed" : RETURN
  127. 3740  GOSUB 3120
  128. 3750  PRINT "Modem   ====>>   Disk" : PRINT
  129. 3760  INPUT "ENTER FILENAME  : ",X$ : IF X$="" THEN 3790
  130. 3770  CLOSE #3 : OPEN "I",#3,X$ : ERROR 58
  131. 3780  CLOSE #3 : OPEN "O",#3,X$ : GOSUB 3120 : RETURN
  132. 3790  PRINT "Aborted" : PRINT : CLOSE #3 : GOSUB 3120 : DISK=0 : RETURN
  133. 3800             ' Service Function Key #8 -------------------------------------
  134. 3810  GOSUB 5000 : KEY(8)ON : ON S GOTO 30000,7800,8800
  135. 3820  PRINT "Disk   ====>>   Modem" : PRINT
  136. 3830  INPUT "ENTER FILENAME  : ",X$ : IF X$="" THEN 3790
  137. 3840  OPEN "I",#3,X$
  138. 3850  PRINT "Proceed With File  ";X$;
  139. 3860  INPUT "  (Y/N)  ";Y$ : Y$=LEFT$(Y$,1)
  140. 3870  IF Y$<>"Y" AND Y$<>"y" THEN 3896
  141. 3875  IF XX THEN XX=0 : RETURN 30040
  142. 3880  WHILE NOT EOF(3)
  143. 3885    LINE INPUT #3,X$
  144. 3890    PRINT #1,X$
  145. 3892    FOR I=1 TO 1500:NEXT
  146. 3894  WEND
  147. 3896  CLOSE #3 : DISK=0 : PRINT "File Closed" : PRINT : RETURN
  148. 3900             ' Service Function Key #9 -------------------------------------
  149. 3910  GOSUB 5000 : KEY(9)ON : ON S GOTO 6900,7900,8900
  150. 3920  EVEN=NOT EVEN : IF NOT EVEN THEN 3940
  151. 3930  PRINT "Changed to Even Parity, With 7 Data Bits"
  152. 3935  OUT &H3FB,26 : RETURN ' E-7-1 Word Structure *****************************
  153. 3940  PRINT "Changed to No Parity With 8 Data Bits." '**************************
  154. 3945  OUT &H3FB,3 : RETURN ' N-8-1 Word Structure ******************************
  155. 4000             ' Service Function Key #10 ------------------------------------
  156. 4010  GOSUB 5000 : KEY(10)ON : ON S GOTO 7000,8000,9000
  157. 4020  PRINT "Pressing Key #5 will continue without hanging up."
  158. 4030  PRINT:STOP : LOCATE ,,1
  159. 5000             '  Functin Keys 1-10 Router  ----------------------------------
  160. 5010  PRINT
  161. 5020  DEF SEG=&H40:A=PEEK(&H17)
  162. 5030  IF (A AND 8)=8 THEN S=1 : DEF SEG : RETURN      'Alternate
  163. 5040  IF (A AND 2)=2 THEN S=2 : DEF SEG : RETURN      'Left Shift
  164. 5050  IF (A AND 4)=4 THEN S=3 : DEF SEG : RETURN      'Control
  165. 5060                      S=0 : DEF SEG : RETURN
  166. 6100  RETURN
  167. 6200  RETURN
  168. 6300  '-------------------------------------------------- Alt + F3 -------------
  169. 6310  PRINT "Switch to 300 Baud."
  170. 6320  ON ERROR GOTO 0
  171. 6330  R=INP(&H3FB)
  172. 6340  K=R OR 128
  173. 6350  OUT &H3FB,K
  174. 6360  OUT &H3F8,&H1
  175. 6370  OUT &H3F9,&H2
  176. 6380  OUT &H3FB,R
  177. 6390  ON ERROR GOTO 1000 : RETURN
  178. 6400  'Continuous Dialing ------------------------------- Alt + F4 -------------
  179. 6405  IF NOT EVEN THEN GOSUB 3940
  180. 6410  GOSUB 10000 : PRINT : PRINT "Continuously Dialing ";X$
  181. 6420  PRINT "Press ESC twice to abort."
  182. 6430  T=0 : PRINT : PRINT "Number of calls attempted so far : ";
  183. 6440  T=T+1 : LOCATE ,36 : PRINT T; : PRINT #1,"AT M1 D "+X$
  184. 6450  IF CHR$(27)=INKEY$ THEN 6497 ELSE WHILE NOT EOF(1)
  185. 6460  INPUT #1,Y$ : FOR X=1 TO 1000 : NEXT
  186. 6470  IF INSTR (Y$,"NO CARRIER") THEN 6440
  187. 6480  IF INSTR (Y$,"CONNECT") THEN 6490
  188. 6485  WEND  : GOTO 6450
  189. 6490  PRINT : PRINT "Connection Established."
  190. 6495  WHILE INKEY$="" : SOUND 1000,10 : SOUND 735,8 : WEND
  191. 6497  PRINT : RETURN
  192. 6500  '------------------------------------------------- Alt + F5 ------------
  193. 6510  PRINT "Switch to 450 Baud."
  194. 6520  ON ERROR GOTO 0
  195. 6530  R=INP(&H3FB)
  196. 6540  K=R OR 128
  197. 6550  OUT &H3FB,K
  198. 6560  OUT &H3F8,&H0
  199. 6570  OUT &H3F9,&H1
  200. 6580  OUT &H3FB,R
  201. 6590  ON ERROR GOTO 1000 : RETURN
  202. 6600  '-------------------------------------------------- Alt + F6 -------------
  203. 6610  PRINT "Switch to 600 Baud."
  204. 6620  ON ERROR GOTO 0
  205. 6630  R=INP(&H3FB)
  206. 6640  K=R OR 128
  207. 6650  OUT &H3FB,K
  208. 6660  OUT &H3F8,&H1
  209. 6670  OUT &H3F9,&H1
  210. 6680  OUT &H3FB,R
  211. 6690  ON ERROR GOTO 1000 : RETURN
  212. 6900  RETURN
  213. 7000  '-------------------------------------------------- Alt + F10 ------------
  214. 7010  PRINT "Hanging-Up" : RUN
  215. 7100  RETURN
  216. 7200  RETURN
  217. 7300  RETURN
  218. 7400  RETURN
  219. 7500  RETURN
  220. 7600  RETURN
  221. 7700  RETURN
  222. 7800  RETURN
  223. 7900  RETURN
  224. 8000  RETURN
  225. 8100  RETURN
  226. 8200  RETURN
  227. 8300  RETURN
  228. 8400  RETURN
  229. 8500  RETURN
  230. 8600  RETURN
  231. 8700  RETURN
  232. 8800  RETURN
  233. 8900  RETURN
  234. 9000  RETURN
  235. 10000            ' Directory  --------------------------------------------------
  236. 10010  PRINT "|------------- Directory --------------------|"
  237. 10020  PRINT ":  A>  560-0979    CAPITAL PC UG BBS         :" : D$(1)="560-0979"
  238. 10030  PRINT ":  B>  949-8848    CPSUG SOFTSIG     (IBMPC) :" : D$(2)="949-8848"
  239. 10040  PRINT ":  C>  251-6293    COMM SIG CPCUG            :" : D$(3)="251-6293"
  240. 10050  PRINT ":  D>  978-9592    BASIC HELP CPCUG   (IBMPC):" : D$(4)="978-9592"
  241. 10060  PRINT ":  E>  424-5817    MONITOR CPCUG      (IBMPC):" : D$(5)="424-5817"
  242. 10070  PRINT ":  F>  759-5049    TOM MACK'S RBBS           :" : D$(6)="759-5049"
  243. 10080  PRINT "|--------------------------------------------<"
  244. 10090  PRINT "   Enter the corresponding letter"
  245. 10100  PRINT "   or type in any phone number."         : PRINT
  246. 10110  LINE INPUT "Number to Dial ? ";X$
  247. 10120  IF LEN(X$)=1 AND X$=>"A" AND X$<="F" THEN X$=D$(ASC(X$)-64) : RETURN
  248. 10130  IF LEN(X$)=1 AND X$=>"a" AND X$<="f" THEN X$=D$(ASC(X$)-96) : RETURN
  249. 10140  IF LEN(X$)<7 THEN LOCATE ,,1 : RETURN 400 ELSE RETURN
  250. 20000            ' Get Character -----------------------------------------
  251. 20010  Y$=""
  252. 20020  FOR A=1 TO 420
  253. 20030  IF NOT EOF(1) THEN Y$=INPUT$(LOC(1),#1) : RETURN
  254. 20040  NEXT A : Y$="" : RETURN
  255. 21000            ' Timeout -----------------------------------------------
  256. 21010  FOR B = 1 TO 10
  257. 21020  GOSUB 20000
  258. 21030  IF MID$(Y$,1,1)=SOH$ THEN RETURN
  259. 21040  IF MID$(Y$,1,1)=EOT$ THEN 22350
  260. 21050  IF MID$(Y$,1,1)=CAN$ THEN 22360
  261. 21060  IF Y$<>"" THEN GOSUB 25000 : GOTO 21000
  262. 21070  NEXT B
  263. 21080  IF Y$="" THEN PRINT #1,NAK$;
  264. 21090  GOTO 21000
  265. 22000            ' Receive With Xmodem Protocol ---------------------------
  266. 22010  PRINT "Receive File With XMODEM Protocol" : PRINT
  267. 22020  IF EVEN THEN GOSUB 3945      ' Set Word Structure To 8-N-1
  268. 22030  GOSUB 3740                   ' Open File
  269. 22040  GOSUB 25000                  ' Purge Buffer
  270. 22050  X$="" : SEC=1
  271. 22060  PRINT #1,NAK$;
  272. 22070  GOSUB 21000                  ' Timeout
  273. 22080  GOSUB 20000                  ' Get Char
  274. 22090  IF Y$="" THEN PRINT "Timeout" : GOTO 22120
  275. 22100  X$=X$+Y$
  276. 22110  IF LEN(X$)<=131 THEN 22080
  277. 22120  IF LEN(X$)= 132 THEN Z$=MID$(X$,4,128) : N=132 : GOTO 22200
  278. 22130  IF LEN(X$)= 131 THEN Z$=MID$(X$,3,128) : N=131 : GOTO 22200
  279. 22140  IF LEN(X$)> 132 THEN 22310
  280. 22150  IF X$=EOT$      THEN 22350
  281. 22160  IF X$=CAN$      THEN 22360
  282. 22170  GOTO 22300
  283. 22180  IF SEC<> VAL(MID$(X$,2,1) THEN 22330
  284. 22190  IF (SEC XOR 255) <> VAL(MID$(X$,3,1) THEN 22340
  285. 22200  FOR Q=1 TO 128 : CK=CK+ASC(MID$(Z$,Q,1)) : NEXT
  286. 22210  IF (CK AND 255) <> (ASC(MID$(X$,N,1))) THEN 22320
  287. 22220  PRINT "Received #";SEC : SEC=255 AND (SEC+1)
  288. 22230  PRINT #3,Z$;
  289. 22240  PRINT #1,ACK$;
  290. 22250  X$="" : CK=0 : GOTO 22080
  291. 22300  PRINT "Short Block in #"   ;SEC : PRINT #1,NAK$; : GOTO 22250
  292. 22310  PRINT "Long  Block in #"   ;SEC : PRINT #1,NAK$; : GOTO 22250
  293. 22320  PRINT "Checksum Error in #";SEC : PRINT #1,NAK$; : GOTO 22250
  294. 22330  PRINT "Block #  Error in #";SEC : PRINT #1,NAK$; : GOTO 22250
  295. 22340  PRINT "Complement Error in #";SEC:PRINT #1,NAK$; : GOTO 22250
  296. 22350  PRINT "File Closed." : PRINT #1,ACK$; : CLOSE #3 : GOTO 22370
  297. 22360  PRINT "Transfer Aborted at Receiver"  : CLOSE #3
  298. 22370  IF EVEN THEN GOSUB 3935
  299. 22380  RETURN 400
  300. 25000            'Purge Buffer ------------------------------------------
  301. 25010  WHILE NOT EOF(1) : DUMMY$=INPUT$(LOC(1),#1) : WEND : RETURN
  302. 30000            ' Send with Xmodem Protocol -----------------------------------
  303. 30010  PRINT "Send File With XMODEM Protocol" : PRINT
  304. 30020  IF EVEN THEN GOSUB 3945 'Set To N-8-1 Word Structure ********************
  305. 30030  XX=-1 : GOSUB 3820          'Open File
  306. 30040  SEC=0 : GOSUB 25000         'Purge Buffer
  307. 30050  EOT=0 : Y$="" : X$=""
  308. 30100  WHILE NOT EOF(1)            'Wait for NAK
  309. 30110     Y$=INPUT$(1,#1)
  310. 30120     IF Y$=CAN$ THEN 30510
  311. 30130     IF Y$=NAK$ THEN 30310
  312. 30140  WEND  : GOTO 30100
  313. 30150  '
  314. 30200  WHILE NOT EOF (1)           ' Wait for ACK
  315. 30210     Y$=INPUT$(1,#1)
  316. 30220     IF Y$=ACK$ THEN CK=0 : Y$="" : GOTO 30360
  317. 30230     IF Y$=NAK$ THEN 30460
  318. 30240     IF Y$=CAN$ THEN 30510
  319. 30250  WEND : GOTO 30200
  320. 30260  '
  321. 30300  IF EOT THEN 30500           ' Build and Send Block
  322. 30310  CK=0 : Y$=""
  323. 30320  IF EOF(3) THEN 30490
  324. 30330  LINE INPUT #3,Z$
  325. 30340  Y$=Y$+CHR$(13) : CK=CK+13
  326. 30345  IF LEN(Y$)=128 THEN 30410
  327. 30360  IF EOT THEN 30500
  328. 30365  FOR X=1 TO LEN(Z$)
  329. 30370    Y$=Y$+MID$(Z$,X,1)
  330. 30380    CK=CK+ASC(MID$(Z$,X,1))
  331. 30390    IF LEN(Y$)=128 THEN 30410
  332. 30400  NEXT : GOTO 30320
  333. 30410  Z$=MID$(Z$,X+1)
  334. 30420  CK=(CK AND 255)
  335. 30430  IF CK>256 THEN CK=CK-256 : GOTO 30430
  336. 30440  SEC=255 AND (SEC+1)
  337. 30450  A$=SOH$+CHR$(SEC)+CHR$(SEC XOR 255)+Y$+CHR$(CK)
  338. 30460  PRINT "Send #";SEC
  339. 30470  PRINT #1,A$;
  340. 30480  GOTO 30200
  341. 30490  Z$=Y$+SPACE$(128-LEN(Y$)) : EOT=-1 : GOTO 30360
  342. 30500  PRINT "Transmission Ended." : PRINT #1,EOT$; : CLOSE #3
  343. 30510  IF EVEN THEN GOSUB 3935
  344. 30520  RETURN 400
  345.